﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include "GcmpRenderingInterface.h"
#include "IObject.h"
#include "GcmpApiDeclaration.h"

namespace gcmp
{
    class ILine3d;
    class Vector3d;

    /// \brief 线型
    ///
    FINAL_INTERFACE class GCMP_DEPRECATED_CLASS(2020/10/01) GCMP_RENDERING_INTERFACE_EXPORT ILineType : public IObject
    {
    public:
        /// \brief 析构函数
        ///
        GCMP_DEPRECATED_API(2020/10/01) virtual ~ILineType();

        /// \brief 获取平台所有线型
        /// \return 平台所有线型
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeNew::GetAllLineTypes(const IDocument*)) static std::vector<OwnerPtr<ILineType>> GetAllLineTypes();

        /// \brief 获取指定名称的线型
        /// \param lineTypeName 线型名称
        /// \return 线型
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeNew::GetLineTypeByName(const IDocument*, const std::wstring&)) static OwnerPtr<ILineType> GetLineType(const std::wstring& lineTypeName);

        /// \brief 获取线型的名称
        /// \return 线型名称
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeData::GetName() const) virtual std::wstring GetName() const = 0;

        /// \brief 设置线型名称
        ///  如果新名称跟原有名称相同或者跟系统里其他线型存在同名，则名称设置将失败
        /// \param name 新的线型名称
        /// \return 成功返回true，失败返回false
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeData::SetName(const std::wstring&) const) virtual bool SetName(const std::wstring& name) = 0;

        /// \brief 获取线型格式
        /// \return 线型格式描述字符串
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeData::GetPattern() const) virtual std::wstring GetPattern() const = 0;

        /// \brief 设置线型格式
        /// \param newPattern 新的线型格式描述
        /// \return 成功返回true，失败返回false, 比如newPattern不正确
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeData::SetPattern(const std::wstring&) const = 0) virtual bool SetPattern(const std::wstring& name) = 0;

        /// \brief 根据当前的线型格式，离散给定直线，离散结果包含一组线段和一组点。
        /// \param pILine 待离散的直线
        /// \param scale 线型缩放因子。如果缩放因子为负值，系统将会根据当前线型计算出一个建议值。
        /// \param vertices 离散后的线段集，从0开始，每两个点表示一条线段，比如(0,1), (2,3)，(4,5)...
        /// \param points 离散后的点集
        /// \return 成功返回true，失败返回false
        GCMP_OBSOLETE_API(2020/10/01, ILineTypeData::Discrete(const ILine3d*, double, std::vector<Vector3d>&, std::vector<Vector3d>&) const) virtual bool Discrete(const ILine3d* pILine, double scale, std::vector<Vector3d>& vertices, std::vector<Vector3d>& points) const = 0;
    };
}

